home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / shell / igo / gosource / henkan.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  2.1 KB  |  130 lines

  1. #define DEBUG 0
  2. /* 
  3.     TOWNS囲碁棋譜記録プログラム
  4.                                           1993/07/12  久保田俊也
  5.  
  6. */
  7. #include "igo.h"
  8. #include "banx.h"
  9. #include "kiffile.h"
  10. #include "title.h"
  11.  
  12. static int kaiten, hanten;
  13. /* kaiten 0=普通 1=右1/4回転 2=右半回転 3=右3/4回転 */
  14. /* hanten 1=普通 -1=反転 */
  15.  
  16. int henkan_init()
  17. {
  18.     kaiten = 0;
  19.     hanten = 1;
  20.     return 0;
  21. }
  22.  
  23. int henkan_set( int dkaiten, int dhanten)
  24. {
  25.  
  26.     kaiten = (kaiten + dkaiten) % 4;
  27.     hanten = hanten * dhanten;
  28.  
  29.     return 0;
  30. }
  31.  
  32. /* 変換処理をした後、xとyの位置になる値を求める関数 */
  33. int henkan_disp_out( int x, int y)
  34. {
  35. BAN_TYPE ban_type;
  36. int type, bansize, bansize2;
  37. int henkanx, henkany;
  38.  
  39.     ban_type = *title_bantype_read();
  40.     if( ban_type.type == NORMAL){
  41.         type = NORMAL;
  42.         bansize = ban_type.size;
  43.         bansize2 = (bansize+1)*(bansize+2)+1;
  44.     }
  45.  
  46.     switch(kaiten){
  47.     case 0:
  48.         henkanx = x;
  49.         henkany = y;
  50.         break;
  51.     case 1:    /*  元へ戻すにはさらに右3/4回転 */
  52.         henkanx = y;
  53.         henkany = bansize-x+1;
  54.         break;
  55.     case 2:
  56.         henkanx = bansize-x+1;
  57.         henkany = bansize-y+1;
  58.         break;
  59.     case 3:    /*  元へ戻すにはさらに右1/4回転 */
  60.         henkanx = bansize-y+1;
  61.         henkany = x;
  62.         break;
  63.     default:
  64.         break;
  65.     }
  66.     
  67.     switch(hanten){
  68.     case 1:
  69.         break;
  70.     case -1:
  71.         henkanx = bansize-henkanx+1;
  72.         break;
  73.     default:
  74.         break;
  75.     }
  76.     
  77.     return henkanx + henkany*(bansize+1);
  78.  
  79. }
  80.  
  81. /* 変換処理をした後、xとyの位置が何処になるかを求める関数 */
  82. int henkan_disp_in( int x, int y)
  83. {
  84. BAN_TYPE ban_type;
  85. int type, bansize, bansize2;
  86. int henkanx, henkany;
  87.  
  88.     ban_type = *title_bantype_read();
  89.     if( ban_type.type == NORMAL){
  90.         type = NORMAL;
  91.         bansize = ban_type.size;
  92.         bansize2 = (bansize+1)*(bansize+2)+1;
  93.     }
  94.  
  95.     switch(hanten){
  96.     case 1:
  97.         break;
  98.     case -1:
  99.         x = bansize-x+1;
  100.         break;
  101.     default:
  102.         break;
  103.     }
  104.     
  105.     switch(kaiten){
  106.     case 0:
  107.         henkanx = x;
  108.         henkany = y;
  109.         break;
  110.     case 1:
  111.         henkanx = bansize-y+1;
  112.         henkany = x;
  113.         break;
  114.     case 2:
  115.         henkanx = bansize-x+1;
  116.         henkany = bansize-y+1;
  117.         break;
  118.     case 3:
  119.         henkanx = y;
  120.         henkany = bansize-x+1;
  121.         break;
  122.     default:
  123.         break;
  124.     }
  125.     
  126.     return henkanx + henkany*(bansize+1);
  127.  
  128. }
  129.  
  130.